LGF_LIFO (FB / 4.0.1)

Übersicht

Autor: Siemens Industry Support

Kurzbeschreibung

LIFO (Last-In First-Out / Stack / Stapelspeicher)
Die Funktion speichert eingehende Daten und gibt die aktuellsten / letzten noch nicht abgearbeiteten Daten aus.

Baustein Schnittstelle

LGF_LIFO (FB)
Bool  enable valid  Bool
    
Bool  push busy  Bool
    
Bool  pop error  Bool
    
Bool  peek status  Word
    
Bool  reset elementCount  DInt
    
Bool  clear isEmpty  Bool
    
Variant  initialItem isFull  Bool
    
   diagnostics  LGF_typeDiagnostics
    
Variant  item  Variant
       
Variant  buffer  Variant
       
   

Input Parameter

BezeichnerDatentyp Default Wert Beschreibung
enableBool FALSE TRUE: Aktiviert die Funktionalität des FB
pushBool false Daten in den Puffer schieben
popBool false Daten aus dem Puffer holen
peekBool false Daten im Puffer ansehen (Der Puffer wird nicht verändert)
resetBool FALSE Puffer initialisieren (Index und Zähler zurücksetzen)
clearBool FALSE Puffer leeren und mit Anfangswert `initialItem` initialisieren (Index und Zähler zurücksetzen).
initialItemVariant --- Wert mit dem das Array des Puffers initialisiert wird
(meistens: `0` / default wert)

Output Parameter

BezeichnerDatentyp Beschreibung
validBool TRUE: Ausgabewerte am FB gültig
busyBool TRUE: FB ist aktive und neue Ausgabewerte können erwartet werden.
errorBool FALSE: Kein Fehler
TRUE: Während der Ausführung des FB ist ein Fehler aufgetreten
statusWord 16#0000-16#7FFF: Status des FB
16#8000-16#FFFF: Fehleridentifikation (siehe folgende Tabelle)
elementCountDInt Anzahl der Elemente im Puffer
isEmptyBool TRUE: Puffer ist leer
isFullBool TRUE: Puffer ist voll
diagnosticsLGF_typeDiagnostics Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.

In/Out Parameter

BezeichnerDatentyp Beschreibung
itemVariant Eintrag, der aus dem Puffer zurückgegeben wird oder in den Puffer geschrieben werden soll
bufferVariant Das ARRAY welches als Puffer genutzt wird. (Array of … )

Status & Error Meldungen

Code / WertBezeichner / Beschreibung
16#0000STATUS_NO_ERROR
Status: Abarbeitung ohne Fehler beendet
16#7000STATUS_NO_CURRENT_JOBS
Status: Keine aktuellen Aufträge, Initial State
16#7001STATUS_FIRST_CALL
Erstaufruf nach steigender Flanke
16#7002STATUS_SUBSEQUENT_CALL
Status: Unteraufruf ohne weitere Detail Information
16#8001ERR_BUFFER_EMPTY
Fehler: Der Puffer ist leer
16#8002ERR_BUFFER_FULL
Fehler: Der Puffer ist voll
16#8200ERR_NO_ARRAY
Fehler: Am Eingang `buffer` liegt kein Array an.
16#8201ERR_WRONG_TYPE_ITEM
Fehler: Der Datentyp des InOut-Parameters `item` entspricht nicht dem Datentyp der Array-Elemente des Eingangs `buffer`.
16#8202ERR_WRONG_TYPE_INITIAL_ITEM
Fehler: Der Datentyp des Eingangs `initialItem` entspricht nicht dem Datentyp des InOut-Parameters `item`.
16#8203ERR_BOOL_NOT_SUPPORTED
Fehler: Boolesche Variablen und Arrays werden von `MOVE_BLOCK_VARIANT` nicht unterstützt. (Verwenden Sie stattdessen einen PLC-Datentyp)
16#8204ERR_MULTIPLE_COMMANDS_DEDECTED
Fehler: Mehrere Kommandos zur gleichen Zeit erkannt
16#8600ERR_UNDEFINED_STATE
Fehler: Unbekannter Zustand in der Statemashine
16#8601ERR_INDEX_IN_ARRAY_LIMITS_1
Fehler: Die Variable `statLastItemIndex` liegt ausserhalb der Array Grenzen
16#8602ERR_INDEX_IN_ARRAY_LIMITS_2
Fehler: Die Variable `statElementCount` liegt ausserhalb der Array Grenzen
16#8610ERR_CLEAR_BUFFER
Fehler: Während des Ablöschens des Puffers in Funktion `MOVE_BLK_VARIANT` - weitere Infos in `subFunctionStatus`
16#8611ERR_RETURN_LAST_ENTRY
Fehler: Während der Rückgabe des letzten Elements aus dem Puffer in Funktion `MOVE_BLK_VARIANT` - weitere Infos in `subFunctionStatus` (POP & PEEK)
16#8612ERR_POP_REPLACE_ITEM_BY_INIT_VALUE
Fehler: Während des Überschreibens des Elements mit dem Initialwert in Funktion `MOVE_BLK_VARIANT` - weitere Infos in `subFunctionStatus (POP)
16#8613ERR_WRITE_ENTRY
Fehler: Während des Schreibens eines Elements in den Puffer in Funktion `MOVE_BLK_VARIANT` - weitere Infos in `subFunctionStatus` (PUSH)

Benutzer definierte Datentypen

LGF_typeDiagnostics (UDT / V1.0.1)

Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.

Bezeichner Datentyp Default Wert Beschreibung
status Word 16#0000 Status des Bausteins oder Fehleridentifikation beim Auftreten des Fehlers
subfunctionStatus Word 16#0000 Status oder Rückgabewert von aufgerufenen FB's, FC's und Systembausteinen
stateNumber DInt 0 Zustand in der Zustandsmaschine des Blocks, in dem der Fehler aufgetreten ist

Funktionsbeschreibung

Hinweis
In subFunctionStatus wird der Status von aufgerufenen Anweisungen ausgegeben. Der Ausgangswert in status gibt in diesem Fall an, welche Anweisung den Fehler verursacht hat. Holen Sie sich in diesem Fall die Informationen aus der TIA Portal Online Hilfe zu den jeweiligen Anweisungen.

Hinweis
Der Stack in der Informatik beruht ebenfalls auf dem LIFO-Prinzip.

Mit dem Eingang push wird ein neues Element vom InOut-Parameter item an der nächsten freien Stelle im Puffer gespeichert. Der Ausgang elementCount wird um eins inkrementiert.

Mit dem Eingang pop wird am InOut-Parameter item das aktuellste / letzte Element ausgegeben und dieses Feld im Puffer durch den Wert am Parameter initialItem ersetzt. Der Ausgang elementCount wird um eins dekrementiert.

Der Eingang peek ermöglicht das Auslesen des letzten Eintrags im Puffer. Der Puffer wird dabei nicht verändert.

Mit dem Eingang reset wird der Puffer initialisiert, Index und Zähler werden zurückgesetzt. Der Ausgang elementCount wird auf null und der Ausgang isEmpty wird auf TRUE gesetzt.

Mit dem Eingang clear wird der Puffer geleert und mit Anfangswert initialItem initialisiert. Index und Zähler werden zurückgesetzt. Der Ausgang elementCount wird auf null, der Ausgang isEmpty auf TRUE gesetzt.

Änderungshistorie

Version & DatumÄnderungsbeschreibung
1.0.0Siemens Industry Online Support
10.07.2018First released version
1.0.1Siemens Industry Online Support
17.08.2018Upgrade: TIA V15 Update 2
1.0.2Siemens Industry Online Support
23.11.2018Upgrade: TIA V15.1
2.0.0Siemens Industry Online Support
29.01.2019Output "done" removed (not necessary, because block works synchronous)
3.0.0Simatic Systems Support
22.10.2019Code refactoring, comments added
Interface change (push, pop, peek etc.)
Set version to V3.0.0, harmonize the version of the whole library
3.0.1Simatic Systems Support
15.02.2021Insert documentation
4.0.0Simatic Systems Support
04.09.2024Rework to PLC Open `Enable` behavior
Add `isFull` outputs
Rework to diagnostic output datatype
4.0.1Simatic Systems Support
15.12.2025Set correct start value for internal diagnostic status, fixes initial enabling error